package br.com.batista.goodbuy.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

import br.com.batista.goodbuy.modelo.Produto;
import br.com.caelum.vraptor.ioc.Component;

@Component
public class ProdutoDao {
	
	private final Session ses;
	
	public ProdutoDao(Session ses) {
		this.ses = ses;
	}
	
	public void salva(Produto produto) {
		
		Transaction tx = ses.beginTransaction();
		ses.save(produto);
		tx.commit();
	}
	
	public void altera(Produto produto) {
		Transaction tx = ses.beginTransaction();
		ses.update(produto);
		tx.commit();
	}
	
	public void exclui(Produto produto) {
		Transaction tx = ses.beginTransaction();
		ses.delete(produto);
		tx.commit();
	}
	
	public Produto carrega(Long id) {
		return (Produto) this.ses.load(Produto.class, id);
	}
	
	public void recarrega(Produto produto) {
		ses.refresh(produto);
		}

	public static Produto criaProduto() {
		Produto produto = new Produto();
		produto.setNome("Prateleira");
		produto.setDescricao("Uma prateleira pra colocar livros");
		produto.setPreco(35.90);
		return produto;
	}
	
	@SuppressWarnings("unchecked")
	public List<Produto> listaTudo() {
		return this.ses.createCriteria(Produto.class).list();
	}

	@SuppressWarnings("unchecked")
	public List<Produto> busca(String nome) {
		return ses.createCriteria(Produto.class).add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE)).list();
	}


}
